package DyingBaby.demo;

import DyingBaby.backend.dm.pageCache.PageCache;
import DyingBaby.backend.dm.pageCache.PageCacheImpl;
import java.io.File;

/**
 * 缓存统计功能演示程序
 */
public class CacheStatsDemo {
    
    public static void main(String[] args) {
        try {
            // 创建临时测试文件
            File testFile = File.createTempFile("cache_demo", ".db");
            testFile.deleteOnExit();
            
            // 先删除可能存在的文件
            if (testFile.exists()) {
                testFile.delete();
            }
            
            // 使用PageCache的工厂方法创建页面缓存
            // 设置较小的缓存大小以便测试 (10页 * 8KB = 80KB，满足最小限制)
            PageCacheImpl pageCache = PageCache.create(testFile.getAbsolutePath().replace(".db", ""), 80 * 1024);
            
            System.out.println("=== 缓存统计功能演示 ===");
            
            // 测试缓存统计功能
            System.out.println("\n1. 初始缓存统计:");
            pageCache.printCacheStats();
            
            // 创建一些页面来测试缓存
            System.out.println("\n2. 创建页面:");
            int page1 = pageCache.newPage("Page 1 data".getBytes());
            int page2 = pageCache.newPage("Page 2 data".getBytes());
            int page3 = pageCache.newPage("Page 3 data".getBytes());
            
            System.out.println("创建了页面: " + page1 + ", " + page2 + ", " + page3);
            pageCache.printCacheStats();
            
            // 测试缓存命中
            System.out.println("\n3. 测试缓存命中:");
            pageCache.getPage(page1); // 应该命中
            pageCache.getPage(page2); // 应该命中
            pageCache.printCacheStats();
            
            // 测试缓存未命中（创建新页面，触发缓存淘汰）
            System.out.println("\n4. 测试缓存未命中:");
            int page4 = pageCache.newPage("Page 4 data".getBytes());
            pageCache.getPage(page4); // 应该未命中，因为缓存已满
            pageCache.printCacheStats();
            
            // 输出性能报告
            System.out.println("\n5. 性能报告:");
            System.out.println(pageCache.getCachePerformanceReport());
            
            // 重置统计信息
            System.out.println("\n6. 重置统计信息:");
            pageCache.resetCacheStats();
            pageCache.printCacheStats();
            
            pageCache.close();
            
            System.out.println("\n=== 演示完成 ===");
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
